<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style></style>
  </head>

  <body>
    <script>
// 当函数执行的时候 会被压入栈 执行完了就会出栈
        // 栈 先进后出 后进先出
        // function a () {
        //     console.log('a');
        //     b()
        // }
        // function b () {
        //     c()
        //     console.log('b');
        // }
        // function c () {
        //     console.log('c');
        // } 
        // a()
        // b()
        // c()

        // 递归 必须要有结束条件 没有结束条件 栈溢出
        // let count = 0;
        // function fn () {
        //     count++;
        //     console.log(count);
        //     // 结束条件
        //     if (count > 5) return;
        //     fn()
        // }
        // fn()


     // 斐波那契数列
        // 1 1 2 3 5 8 13 21 .....
        // 第一项 和 第二项 是 1
        // 第三项开始 是 前两项 的 和
        // 每一项 就是 前两项的和
        // 第n项 就是 n-1 项 加上 n-2项的和

        // n = 0  => 1
        // n = 1  => 1
        // n = 2 => 2
        // n是索引

      // 递归 自己调用自己 并且要有结束条件
      function fn(n) {
        if([0,1].includes(n)) return 1
        return fn(n-1)+fn(n-2)  //n代表下标
      }
      // 1 1 2 3 5 8 13 21
      console.log(fn(0));
      console.log(fn(1));
      console.log(fn(2));
      console.log(fn(3));
      console.log(fn(4));
      console.log(fn(5));
      console.log(fn(6));
      console.log(fn(7));
    </script>
  </body>
</html>